﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EntitiesLayer;
using DAL.Repositories;
using System.Transactions;
using System.Data.SqlClient;
using System.Data;
using DAL.AbstractRepositories;

namespace DAL.Repositorios
{
    public class RepositoryPermisos : DAL.AbstractRepositories.AbstractRepository<Permiso>
    {

        public override void Update(Permiso permiso){
            
            Updated.Add(permiso);
        
        }
        public override IEnumerable<Permiso> GetAll()
        {
            IList<Permiso> listaPermiso = new List<Permiso>();
            DataSet ds = GetDataSetPermiso(DBNull.Value, DBNull.Value);


            foreach (DataRow dr in ds.Tables[0].Rows)
                listaPermiso.Add (crearPermiso(Convert.ToInt32(dr["IdPermiso"]), dr));

            return listaPermiso.Count > 0 ? listaPermiso : null;
        }

        public override Permiso GetById(int id)
        {
            Permiso p = null;
            DataSet ds = GetDataSetPermiso(id,DBNull.Value);

            foreach (DataRow dr in ds.Tables[0].Rows)
                p = crearPermiso(id, dr);


            return p;
        }

        public static Permiso crearPermiso(int id, DataRow dr) {
            string nombre = dr["NombrePermiso"].ToString();
            Permiso p = new Permiso(id, dr["NombrePermiso"].ToString(), 
                                    dr["DescTransaccion"].ToString());

            return p;
        }

        internal static IList<Permiso> PermisosRol(int idRol) {

            IList<Permiso> setPermiso = new List<Permiso>();
            SqlCommand cmd = new SqlCommand();
            cmd.Parameters.Add(new SqlParameter("@IdRol", idRol));
            DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "PaConsultarPermisosRol");

            foreach (DataRow dr in ds.Tables[0].Rows)
            {   
                int id =Convert.ToInt32(dr["IdPermiso"]);
                
                setPermiso.Add( crearPermiso(id, dr));
            }
           
            return setPermiso.Count>0? setPermiso: null;
        }


        private static DataSet GetDataSetPermiso( object idp, object idr) {

            SqlCommand cmd = new SqlCommand();
            cmd.Parameters.Add(new SqlParameter("@IdPermiso", idp));
            DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "PaConsultarPermisosGeneral");

            return ds;
        }

        protected override void UpdateEntity(Permiso permiso) {

            SqlCommand cmd = new SqlCommand();
            cmd.Parameters.Add(new SqlParameter("@IdPermiso", permiso.Id));
            cmd.Parameters.Add(new SqlParameter("@Nombre", permiso.Nombre));

            DBAccess.ExecuteSPNonQuery(ref cmd, "PaManModificarPermiso");
        
        }
        
    }
}
